# 作业：
import pymysql


class DB():
    def __init__(self, host, user, password, database, cursorclass=None):
        self.host = host
        self.user = user
        self.password = password
        self.databases = database
        self.cursorclass = cursorclass

    def connect(self):
        self.db = pymysql.connect(host=self.host, user=self.user,
                                  password=self.password, database=self.databases, cursorclass=self.cursorclass)
        self.cursor = self.db.cursor()

    def close(self):
        self.cursor.close()
        self.db.close()

    def select_one(self, sql):  # select * from student where id = 3;   10
        self.connect()  # 第一步，调用连接数据库方法，连接数据库
        try:  # 尝试去执行sql
            self.cursor.execute(sql)  # 使用游标对象，执行sql语句
            result = self.cursor.fetchone()  # 返回一条数据 fetchone()
            self.close()  # 最后关闭掉数据库，不要忘记
        except Exception as e:  # 如果sql执行错误
            print("select error %s" % e)
            result = None
        return result

    def Select_all(self, sql):
        self.connect()
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print("select error %s" % e)
            result = None
        return result

    def __edit(self, sql):
        self.connect()
        try:
            self.cursor.execute(sql)
            self.db.commit()
            result = "数据库更新成功"
        except Exception:
            result = "数据库更新失败"

    def insert(self, sql):
        return self.__edit(sql)

    def delete(self, sql):
        return self.__edit(sql)

    def update(self, sql):
        return self.__edit(sql)


db1 = DB(host="124.70.91.232", user="root", password="12345678", database="student",
         cursorclass=pymysql.cursors.DictCursor)

# db1.insert("insert into inform values('刘门马',90,'辽宁沈阳','18012345678');")
# db1.insert("insert into inform values('四季阳',23,'辽宁沈阳','13050605040');")
# print("存入成功：",db1.Select_all('select * from inform;'))
# 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# db1.update("update inform set age=20 where stu_name='刘门马'")
# print("更改成功：",db1.select_one('select * from inform;'))
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
# 删除学生：删除的学生将不在展示
# db1.delete("delete from inform where stu_name='刘门马'")
# print("删除成功：",db1.Select_all('select * from inform;'))
# 展示全部学生：可以看到全部的学生姓名
# print(db1.Select_all('select stu_name from inform;'))
# 点到学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
# Choice="SELECT stu_name FROM inform ORDER BY RAND() LIMIT 1"
# result=db1.select_one(Choice)
# if result:
#     name=result["stu_name"]
#     print(f"{name}" + "，到！")
# else:
#     print("学生信息不存在")
# 以上内容，需要连接数据库，每次的数据都需要增、删、改、查去做
# 2、点餐管理系统
# 1》、餐馆可以新增菜品、下架菜品、修改菜品
# 2》、每个菜品，都有对应的库存，所有菜品的库存均为999，每出一道菜，库存-1
# 菜品有对应的价格，餐厅老板定义价格每道菜不允许超过15元，没有小数单位，均为整数
# 3》、餐馆后台有点赞系统，能够收集客户对菜品的喜好，0~5分
# 4》、有菜品评分提报功能，对平均分数（菜品总分/打分人数）低于3分的菜品进行强制下架；
#
#
# 客户端
# perper = 0 类属性
# 总分= 0
# 1》、客户可以进行点餐 调用父类
# 2》、每个客户的起始钱包均为200，订餐后扣减对应金额
# 3》、可以为每个菜进行打分
